package com.biz.utils;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/*************************************************************************
 * 版本： V1.0
 * 
 * 文件名称 ：JedisUtilTest.java 描述说明 ：Jedis 跨服务器数据共享
 * 
 * 创建信息 : create by 刘佳佳 on 2015-9-24 下午2:11:41 修订信息 : modify by ( ) on (date)
 * for ( )
 * 
 * 版权信息 : Copyright (c) 2015 扬州北斗软件有限公司
 **************************************************************************/
public class JedisUtil {
	private static JedisPool pool = null;  
	private static Jedis jedis=null;
	
	/** 
     * 构建redis连接池 
     * @param ip 
     * @param port 
     * @return JedisPool 
     */  
    public static JedisPool getPool() {  
        if (pool == null) {  
            JedisPoolConfig config = new JedisPoolConfig();  
            //控制一个pool可分配多少个jedis实例，通过pool.getResource()来获取；  
            //如果赋值为-1，则表示不限制；如果pool已经分配了maxActive个jedis实例，则此时pool的状态为exhausted(耗尽)。  
            //config.setMaxActive(500); 
            config.setMaxIdle(300);
            //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。  
            config.setMaxIdle(5);  
            //表示当borrow(引入)一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；  
            //config.setMaxWait(1000 * 100); 
            config.setMaxWaitMillis(1000*100);
            //在borrow一个jedis实例时，是否提前进行validate操作；如果为true，则得到的jedis实例均是可用的；  
            config.setTestOnBorrow(true);  
            pool = new JedisPool(config, "192.168.1.7",6379);  
        }  
        return pool;  
    }  
      
    /** 
     * 返还到连接池 
     *  
     * @param pool  
     * @param redis 
     */  
    public static void returnResource(JedisPool pool, Jedis redis) {  
        if (redis != null) {  
            pool.returnResource(redis);  
        }  
    }  
	

	public JedisUtil() {
		super();
		pool = new JedisPool(new JedisPoolConfig(), "192.168.1.7");
		jedis = pool.getResource();
		// jedis.auth("password");
		if(pool==null){
			pool = new JedisPool(new JedisPoolConfig(), "121.40.144.183");
			
		}
		if(jedis==null){
			jedis = pool.getResource();
		}
	}


	/**
	 * 通过Key 获取值
	 * @param key
	 * @return
	 */
	public  String get(String key) {
		String value=jedis.get(key);
		return value;
	}
	
	/**
	 * 通过简单的key、value 设置，可以是直接覆盖
	 * @param key
	 * @param value
	 */
	public  void setKeyVlue(String key,String value){
		jedis.set(key, value);
	}
	
	/**
	 * 在原来基础上修改(在后面拼接)
	 * @param key
	 * @param value
	 */
	public  void appendValue(String key,String value){
		jedis.append(key, value); 
	}
	
	/**
	 *  删除key对应的记录
	 * @param key
	 */
	public  void delValue(String key){
		jedis.del(key);
	}
	
	/**
	 * 放置HashMap 类型数据
	 * @param key
	 * @param map
	 */
	public  void setMapValue(String key,Map<String,String> map){
		jedis.hmset(key, map);
	}
	
	/**
	 * 第一个参数是存入redis中map对象的key，后面跟的是放入map中的对象的key，后面的key可以跟多个，是可变参数
	 * @param mapkey
	 * @param key
	 * @return
	 */
	public  List<String> getMapValue(String mapkey,String key){
		List<String> rsmap=jedis.hmget(mapkey,key);
		return rsmap;
	}
	
	/**
	 * 通过key 获取迭代
	 * @param key
	 * @return Iterator<String>
	 */
	public  Iterator<String> getIterator(String key){
		Iterator<String> iter=jedis.hkeys(key).iterator();
		return iter;
	}
	
	public void getAllKeys(){
		jedis.keys("*");
	}



	
}
